package 树;

/**
 * @author ssh
 * @date 2025/8/24
 * @description 二叉树的直径，大概率是穿过根节点，左子树某个节点连接右子树某个节点的长度+1
 */
public class 二叉树的直径 {
    int maxDiameter = 0;
    public int diameterOfBinaryTree(TreeNode root) {
        depth(root);
        return maxDiameter;


    }
    public int depth(TreeNode node) {
        if (node == null) {
            return 0;
        }
        int leftDepth = depth(node.left);
        int rightDepth = depth(node.right);
        // 更新最大直径
        maxDiameter = Math.max(maxDiameter, leftDepth + rightDepth);
        // 返回当前节点的深度
        return Math.max(leftDepth, rightDepth) + 1;
    }

    public static void main(String[] args) {
        // 测试代码
        TreeNode root = new TreeNode(1);
        root.left = new TreeNode(2);
        root.right = new TreeNode(3);
        root.left.left = new TreeNode(4);
        root.left.right = new TreeNode(5);

        二叉树的直径 solution = new 二叉树的直径();
        int diameter = solution.diameterOfBinaryTree(root);
        System.out.println(diameter); // 输出: 3
    }
}
